<?php
/**
 * User: LRZ
 * Date: 2020/1/17
 * Time: 15:36
 */

/**
 *  989.数组形式的整数加法
 *
 *  标签：数组
 *
 *  对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。
 *  给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。
 *
 *  示例 1：
 *      输入：A = [1,2,0,0], K = 34
 *      输出：[1,2,3,4]
 *      解释：1200 + 34 = 1234
 *
 *  示例 2：
 *      输入：A = [2,7,4], K = 181
 *      输出：[4,5,5]
 *      解释：274 + 181 = 455
 *
 *  示例 3：
 *      输入：A = [2,1,5], K = 806
 *      输出：[1,0,2,1]
 *      解释：215 + 806 = 1021
 *
 *  示例 4：
 *      输入：A = [9,9,9,9,9,9,9,9,9,9], K = 1
 *      输出：[1,0,0,0,0,0,0,0,0,0,0]
 *      解释：9999999999 + 1 = 10000000000
 *   
 *  提示：
 *      1 <= A.length <= 10000
 *      0 <= A[i] <= 9
 *      0 <= K <= 10000
 *      如果 A.length > 1，那么 A[0] != 0
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/add-to-array-form-of-integer
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$A   = [9, 9];
$K   = 1;
$res = addToArrayForm($A, $K);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function addToArrayForm($A, $K)
{
    $res  = [];
    $size = count($A) - 1;
    while ($size >= 0 || $K > 0) {
        if ($size >= 0) {
            $K += $A[$size];
        }
        $res[] = ($K % 10);
        $K     = (int)($K / 10);
        $size--;
    }
    return array_reverse($res);
}